/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package RichTreeExample.controller;

import RichTreeExample.be.NodoArbol;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.richfaces.component.html.HtmlTree;
import org.richfaces.event.NodeSelectedEvent;
import org.richfaces.model.TreeNode;
import org.richfaces.model.TreeNodeImpl;

/**
 *
 * @author Emmanuel
 */
public class TreeController {

    private TreeNodeImpl<NodoArbol> nodoRaiz1 = new TreeNodeImpl<NodoArbol>();
    private TreeNodeImpl<NodoArbol> nodoRaiz2 = new TreeNodeImpl<NodoArbol>();
    private TreeNodeImpl<NodoArbol> nodoRaiz3 = new TreeNodeImpl<NodoArbol>();
    private TreeNodeImpl<NodoArbol> nodosRaiz = new TreeNodeImpl<NodoArbol>();
    private List<NodoArbol> nodosSeleccionados = new ArrayList<NodoArbol>();
    private NodoArbol nodoSeleccionado;

    public TreeController() {
        crearArbol();
    }

    public void crearArbol(){
        NodoArbol raiz1= new NodoArbol(1,"NODO RAIZ 1");
        List<NodoArbol> subnodos1= new ArrayList<NodoArbol>();
        subnodos1.add(new NodoArbol(10,"SUB NODO 10"));
        subnodos1.add(new NodoArbol(11,"SUB NODO 11"));
        subnodos1.add(new NodoArbol(12,"SUB NODO 12"));
        raiz1.setNodos(subnodos1);
        NodoArbol raiz2= new NodoArbol(2,"NODO RAIZ 2");
        List<NodoArbol> subnodos2= new ArrayList<NodoArbol>();
        subnodos2.add(new NodoArbol(10,"SUB NODO 20"));
        subnodos2.add(new NodoArbol(11,"SUB NODO 21"));
        raiz2.setNodos(subnodos2);
        NodoArbol raiz3= new NodoArbol(3,"NODO RAIZ 3");
        List<NodoArbol> subnodos3= new ArrayList<NodoArbol>();
        subnodos3.add(new NodoArbol(30,"SUB NODO 30"));
        subnodos3.add(new NodoArbol(31,"SUB NODO 31"));
        subnodos3.add(new NodoArbol(32,"SUB NODO 32"));
        subnodos3.add(new NodoArbol(33,"SUB NODO 33"));
        raiz3.setNodos(subnodos3);

        nodoRaiz1.setData(raiz1);
        nodoRaiz2.setData(raiz2);
        nodoRaiz3.setData(raiz3);

        nodosRaiz.addChild(raiz1.getCodigo(), nodoRaiz1);
        nodosRaiz.addChild(raiz2.getCodigo(), nodoRaiz2);
        nodosRaiz.addChild(raiz3.getCodigo(), nodoRaiz3);

        for(NodoArbol na : raiz1.getNodos()){
            TreeNodeImpl<NodoArbol> tna = new TreeNodeImpl<NodoArbol>();
            tna.setData(na);
            nodoRaiz1.addChild(na.getCodigo(), tna);
        }

        for(NodoArbol na : raiz2.getNodos()){
            TreeNodeImpl<NodoArbol> tna = new TreeNodeImpl<NodoArbol>();
            tna.setData(na);
            nodoRaiz2.addChild(na.getCodigo(), tna);
        }

        for(NodoArbol na : raiz3.getNodos()){
            TreeNodeImpl<NodoArbol> tna = new TreeNodeImpl<NodoArbol>();
            tna.setData(na);
            nodoRaiz3.addChild(na.getCodigo(), tna);
        }

    }

    public void processSelection(NodeSelectedEvent event) {
        HtmlTree tree = (HtmlTree) event.getComponent();
        nodoSeleccionado = (NodoArbol) tree.getRowData();
        nodosSeleccionados.clear();
        TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey());
        if (currentNode.isLeaf()) {
            nodosSeleccionados.add((NodoArbol) currentNode.getData());
        } else {
            Iterator<Map.Entry<Object, TreeNode>> it = currentNode.getChildren();
            while (it != null && it.hasNext()) {
                Map.Entry<Object, TreeNode> entry = it.next();
                nodosSeleccionados.add((NodoArbol)entry.getValue().getData());
            }
        }
    }



    public TreeNodeImpl<NodoArbol> getNodoRaiz1() {
        return nodoRaiz1;
    }

    public void setNodoRaiz1(TreeNodeImpl<NodoArbol> nodoRaiz1) {
        this.nodoRaiz1 = nodoRaiz1;
    }

    public TreeNodeImpl<NodoArbol> getNodoRaiz2() {
        return nodoRaiz2;
    }

    public void setNodoRaiz2(TreeNodeImpl<NodoArbol> nodoRaiz2) {
        this.nodoRaiz2 = nodoRaiz2;
    }

    public TreeNodeImpl<NodoArbol> getNodoRaiz3() {
        return nodoRaiz3;
    }

    public void setNodoRaiz3(TreeNodeImpl<NodoArbol> nodoRaiz3) {
        this.nodoRaiz3 = nodoRaiz3;
    }

    public List<NodoArbol> getNodosSeleccionados() {
        return nodosSeleccionados;
    }

    public void setNodosSeleccionados(List<NodoArbol> nodosSeleccionados) {
        this.nodosSeleccionados = nodosSeleccionados;
    }

    public TreeNodeImpl<NodoArbol> getNodosRaiz() {
        return nodosRaiz;
    }

    public void setNodosRaiz(TreeNodeImpl<NodoArbol> nodosRaiz) {
        this.nodosRaiz = nodosRaiz;
    }

    public NodoArbol getNodoSeleccionado() {
        return nodoSeleccionado;
    }

    public void setNodoSeleccionado(NodoArbol nodoSeleccionado) {
        this.nodoSeleccionado = nodoSeleccionado;
    }

    


}
